UNPKG

8.34 kBJavaScriptView Raw
1'use strict';
2
3var Path = require('path');
4var Should = require('should');
5var IFNode = require('../');
6
7describe('Application', function() {
8 describe('app = new Application', function() {
9 it('without parameters', function() {
10 var app = IFNode();
11 var app1 = IFNode();
12
13 app.should.be.an.Object();
14 app.should.be.equal(app1);
15 });
16
17 it('with parameters', function() {
18 var application_path = Path.resolve(__dirname, '../examples/config');
19 var application_alias = 'application';
20 var env = 'local';
21 var app = IFNode({
22 project_folder: application_path,
23 alias: application_alias,
24 env: env
25 });
26
27 app.project_folder.should.be.equal(application_path);
28 app.project_folder.should.be.equal(app.projectFolder);
29
30 app.alias.should.be.equal(application_alias);
31 });
32
33 it('should be valid configuration', function() {
34 var app = IFNode('application');
35 var config = app.config;
36 var site_config = config.site;
37
38 config.should.be.an.Object();
39
40 config.env.should.be.equal('local');
41 config.environment.should.be.equal('local');
42
43 site_config.local.origin.should.be.equal('https://localhost:3000');
44 site_config.global.ssl.key.should.be.equal(Path.resolve(app.project_folder, 'path/to/key'));
45 site_config.global.origin.should.be.equal('https://ifnode.com');
46
47 config.application.express.should.be.an.Object();
48 config.application.folders.should.be.an.Object();
49
50 config.db.virtual.schema.should.be.equal('virtual');
51 });
52
53 it("should be non-editable configuration", function() {
54 var app = IFNode('application');
55 var config = app.config;
56
57 (function() {
58 config.site = {};
59 }).should.throw();
60
61 (function() {
62 config.site.local = {};
63 }).should.throw();
64
65 (function() {
66 config.site.local.origin = 'my custom origin';
67 }).should.throw();
68 });
69
70 it('should few instances', function() {
71 var app1 = IFNode({
72 alias: 'app1'
73 });
74 var app2 = IFNode({
75 alias: 'app2'
76 });
77
78 IFNode('app1').should.be.equal(app1);
79 IFNode('app2').should.be.equal(app2);
80 });
81 });
82
83 describe('app properties', function() {
84 var app = IFNode({
85 alias: 'app-properties-check'
86 });
87
88 app.load();
89
90 app.config.should.be.an.Object();
91 app.server.should.be.an.Object();
92 app.listener.should.be.a.Function();
93
94 app.components.should.be.an.Object();
95 app.models.should.be.an.Object();
96 app.controllers.should.be.an.Object();
97
98 app.id.should.be.a.String();
99 app.alias.should.be.a.String();
100 app.project_folder.should.be.a.String();
101 app.projectFolder.should.be.a.String();
102 app.backend_folder.should.be.a.String();
103 app.backendFolder.should.be.a.String();
104 });
105
106 describe('app.require(id: string)', function() {
107 var app = require('../examples/extensions/app');
108
109 app.require('protected/extensions/a').should.have.property('value', 'a');
110 app.require('./protected/extensions/a/b').should.have.property('value', 'a/b');
111 app.require('app').should.be.equal(app);
112 app.require('./../extensions/app').should.be.equal(app);
113 });
114
115 describe('app.register(module: string|Extension|Array<string|Extension>)', function() {
116 it('not should empty', function() {
117 var app = IFNode();
118
119 (function() {
120 app.register();
121 }).should.throw();
122 });
123
124 it('load by extension name', function(done) {
125 var app = IFNode({
126 project_folder: Path.resolve(__dirname, '../examples/plugins')
127 });
128
129 app.register('ifnode-plugins-internal');
130 done();
131 });
132
133 it('load by external name', function(done) {
134 var app = IFNode({
135 project_folder: Path.resolve(__dirname, '../examples/plugins')
136 });
137 var ifnode_plugin_external = Path.resolve(__dirname, '../examples/plugins/node_modules/ifnode-plugins-external');
138
139 app.register(ifnode_plugin_external);
140 done();
141 });
142
143 it('load by module', function(done) {
144 var app = IFNode({
145 project_folder: Path.resolve(__dirname, '../examples/plugins')
146 });
147 var ifnode_plugin_external = require(Path.resolve(__dirname, '../examples/plugins/node_modules/ifnode-plugins-external'));
148
149 app.register(ifnode_plugin_external);
150 done();
151 });
152
153 it('load by array', function(done) {
154 var app = IFNode({
155 project_folder: Path.resolve(__dirname, '../examples/plugins')
156 }),
157 ifnode_plugin_external = require(Path.resolve(__dirname, '../examples/plugins/node_modules/ifnode-plugins-external'));
158
159 app.register([
160 'ifnode-plugins-internal',
161 ifnode_plugin_external
162 ]);
163 done();
164 });
165
166 it('load schema, controller, component and mixed plugins', function() {
167 var app = IFNode({
168 project_folder: Path.resolve(__dirname, '../examples/plugins')
169 });
170
171 var internal_schema = require(Path.resolve(__dirname, '../examples/plugins/protected/extensions/internal-schema'));
172 var internal_component = require(Path.resolve(__dirname, '../examples/plugins/protected/extensions/internal-component'));
173 var internal_controller = require(Path.resolve(__dirname, '../examples/plugins/protected/extensions/internal-controller'));
174 var external_mixed_module_path = Path.resolve(__dirname, '../examples/plugins/node_modules/external-mixed');
175
176 app.register([
177 'internal-schema',
178 'internal-component',
179 'internal-controller',
180 external_mixed_module_path
181 ]);
182
183 var modules = app._modules;
184
185 modules.should.containEql(internal_schema);
186 modules.should.containEql(internal_component);
187 modules.should.containEql(internal_controller);
188 modules.should.containEql(require(external_mixed_module_path));
189 });
190 });
191
192 describe('app.load()', function() {
193 var app = IFNode({
194 alias: 'app-load-test'
195 });
196
197 Should.equal(Object.keys(app.components).length, 0);
198 Should.equal(Object.keys(app.models).length, 0);
199 Should.equal(Object.keys(app.controllers).length, 0);
200
201 app.load();
202
203 app.components.should.be.an.Object();
204 app.models.should.be.an.Object();
205 app.controllers.should.be.an.Object();
206 });
207
208 describe('app.run(callback?: function)', function() {
209 it('without callback', function(done) {
210 var app = IFNode();
211
212 app.run();
213
214 /**
215 * setTimeout for node.js 0.10.x compatibility
216 */
217 setTimeout(function() {
218 app.down();
219 done();
220 }, 10);
221 });
222
223 it('with callback', function(done) {
224 var app = IFNode();
225
226 app.run(function(config) {
227 this.should.be.equal(app);
228 this.config.should.be.equal(config);
229
230 app.down();
231 done();
232 });
233 });
234 });
235
236 describe('app.down(callback?: function)', function() {
237 it('without callback', function(done) {
238 var app = IFNode();
239
240 app.run(function() {
241 app.down();
242 done();
243 });
244 });
245
246 it('with callback', function(done) {
247 var app = IFNode();
248
249 app.run(function() {
250 app.down(function() {
251 done();
252 });
253 });
254 });
255 });
256});